import { login as loginApi, logout as logoutApi } from '@/api/auth';

/**
 * 认证工具类
 * 提供登录、登出、权限检查等功能
 */

/**
 * 从localStorage获取token
 * @returns {string|null} token值
 */
export const getToken = () => {
  return localStorage.getItem('token');
};

/**
 * 将token存储到localStorage
 * @param {string} token - token值
 */
export const setToken = (token) => {
  localStorage.setItem('token', token);
};

/**
 * 从localStorage删除token
 */
export const removeToken = () => {
  localStorage.removeItem('token');
};

/**
 * 从localStorage获取用户信息
 * @returns {Object|null} 用户信息对象
 */
export const getUserInfo = () => {
  const userInfo = localStorage.getItem('userInfo');
  return userInfo ? JSON.parse(userInfo) : null;
};

/**
 * 将用户信息存储到localStorage
 * @param {Object} userInfo - 用户信息对象
 */
export const setUserInfo = (userInfo) => {
  localStorage.setItem('userInfo', JSON.stringify(userInfo));
};

/**
 * 从localStorage删除用户信息
 */
export const removeUserInfo = () => {
  localStorage.removeItem('userInfo');
};

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export const isLoggedIn = () => {
  return !!getToken();
};

/**
 * 检查用户是否是管理员
 * @returns {boolean} 是否是管理员
 */
export const isAdmin = () => {
  const userInfo = getUserInfo();
  return userInfo && userInfo.roles && userInfo.roles.includes('admin');
};

/**
 * 登录函数
 * @param {Object} credentials - 登录凭证
 * @param {string} credentials.email - 邮箱
 * @param {string} credentials.password - 密码
 * @returns {Promise<Object>} 用户信息和token
 */
export const login = async (credentials) => {
  try {
    // 调用API登录
    const res = await loginApi(credentials);
    const response = res.data;
    // 存储token和用户信息
    if (response.token && response.userInfo) {
      setToken(response.token);
      setUserInfo(response.userInfo);
    }
    
    return response;
  } catch (error) {
    console.error('登录失败:', error);
    throw error;
  }
};

/**
 * 登出函数
 */
export const logout = async () => {
  try {
    // 调用API登出
    await logoutApi();
    
    // 清除本地存储
    removeToken();
    removeUserInfo();
    // 可选：清空其他需要清除的状态
  } catch (error) {
    console.error('登出失败:', error);
    // 即使API调用失败，也清除本地存储
    removeToken();
    removeUserInfo();
    throw error;
  }
};

/**
 * 刷新用户信息
 * @returns {Promise<Object>} 刷新后的用户信息
 */
export const refreshUserInfo = async () => {
  try {
    // 实际项目中应该调用真实的API获取最新用户信息
    // const response = await requestInstance.get('/api/users/current');
    
    // 模拟刷新用户信息
    const currentUser = getUserInfo();
    if (currentUser) {
      // 更新用户信息的时间戳表示已刷新
      currentUser.updatedAt = new Date().toISOString();
      setUserInfo(currentUser);
    }
    
    return currentUser;
  } catch (error) {
    console.error('刷新用户信息失败:', error);
    throw error;
  }
};

/**
 * 获取当前登录用户的权限列表
 * @returns {Array} 权限列表
 */
export const getCurrentUserPermissions = () => {
  const userInfo = getUserInfo();
  return userInfo && userInfo.permissions ? userInfo.permissions : [];
};

/**
 * 获取当前登录用户的角色列表
 * @returns {Array} 角色列表
 */
export const getCurrentUserRoles = () => {
  const userInfo = getUserInfo();
  return userInfo && userInfo.roles ? userInfo.roles : [];
};